<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>对象方法</title>
</head>
<body>
    
</body>
</html>
<script>
    //对象方法 定义在对象中的函数我们称为方法
    // let lisi = {
    //     name : "李四",
    //     age : 22,
    //     grade : {
    //         math : 99,
    //         english : 67
    //     },
    //     //平均成绩
    //     avgGrade:function(){
    //         let total = 0;
    //         for(const key in this.grade){
    //             total += this.grade[key];
    //         }
    //         return total/this.propertyCount('grade');
    //     },
    //     //获取属性数量
    //     propertyCount:function(property){
    //         let count = 0;
    //         for(const key in this[property]){
    //             count++;
    //         }
    //         return count;
    //     }
    // }
    // console.log(lisi.avgGrade());


    //引用特性
    //引用类型引用的时候只会复制引用地址
    //复制的时候只是把原来的空间给了这个变量  使用的是同一个内存地址
    // let hd = {name: "后盾人"};
    // let cms = hd;
    // cms.name = 'hdcms';
    // console.log(hd,cms)

//队形做为函数的参数使用的时候也不会产生完全的复制  内部和外部共同使用同一个变量
    // let user = {age:22};
    // function hd(user){
    //     user.age += 10;
    // }
    // hd(user);
    // console.log(user)


    //对象的比较的是对内存地址的比较，所以使用 == 或者  ===是一样的
    // let hd = {};
    // let xj = hd;
    // let cms = {};
    // console.log(hd === xj);    
    // console.log(hd == xj)
    // //一个新的对象在内存中是一个新的空间
    // console.log(hd === cms);

    //this指代的是当前对象的引用,始终建议在代码内部使用
    // let xj = {
    //     name:"向军",
    //     show(){
    //         return xj.name;
    //     }
    // };
    // let hd = xj;
    // xj = null;
    // console.log(hd.show());

    //这里将xj修改为null

    //改用为this之后一切正常
    // let xj = {
    //     name : "向军",
    //     show(){
    //         return this.name;
    //     }
    // };
    // let hd = xj;
    // xj = null;
    // console.log(hd.show());

    //展开语法
    //使用点语法可以展示对象的结构
    // let hd = {name : "后盾人",web:"houdunren.com"};
    // //可以使用...合并对象
    // let info = {...hd,site:'hdcms'};
    // console.log(info)


    //对象进行合并
    // function upload(params={}){
    //     let config = {
    //         type:'*.jpeg,*.png',
    //         size:10000
    //     };
    //     //将config对象和传递过来的params对象进行合并,合并对象的时候，如果键是一样的话，后面的键值会替代前面的键值
    //     params = {...config,...params};
    //     console.log(params)
    // }
    // upload({size:999});
    




</script>